package com.yx.enterresourceplanning.service.serviceImpl;

import com.yx.enterresourceplanning.mapper.UserDao;
import com.yx.enterresourceplanning.service.UserService;
import com.yx.enterresourceplanning.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.math.BigInteger;

@Service
public class UserServiceImpl implements UserService {
    
    @Autowired
    private UserDao userDao;
    
    @Override
    public User login(String username, String password) {
        if (username == null || username.isEmpty() || password == null || password.isEmpty()) {
            return null; // 用户名或密码为空，返回null
        }
        String encryptedPassword = md5Encrypt(password);
        // 调用UserDao的login方法查询用户
        User user = userDao.login(username, encryptedPassword);

        // 可以在这里添加额外的逻辑，如日志记录
        if (user != null) {
            // 登录成功，可以记录日志
            System.out.println("用户 " + username + " 登录成功");
        } else {
            // 登录失败，可以记录日志
            System.out.println("用户 " + username + " 登录失败");
        }

        return user;
    }

    @Override
    public int addUser(String userId, String name, String username, String password, String depId, String role) {
        // 对密码进行MD5加密
        String encryptedPassword = md5Encrypt(password);
        return userDao.save(userId, name, username, encryptedPassword, depId, role);
    }

    @Override
    public User findByUsername(String username) {
        return userDao.findByUsername(username);
    }

    /**
     * 使用MD5算法对密码进行加密
     * @param input 原始密码
     * @return 加密后的密码
     */
    private String md5Encrypt(String input) {
        try {
            // 获取MD5算法实例
            MessageDigest md = MessageDigest.getInstance("MD5");

            // 将输入转换为字节数组并进行加密
            byte[] messageDigest = md.digest(input.getBytes());

            // 将字节数组转换为十六进制字符串
            BigInteger no = new BigInteger(1, messageDigest);
            String hashtext = no.toString(16);

            // 补全前导零，确保长度为32位
            while (hashtext.length() < 32) {
                hashtext = "0" + hashtext;
            }

            return hashtext;
        } catch (NoSuchAlgorithmException e) {
            // 如果MD5算法不可用，则抛出运行时异常
            throw new RuntimeException("MD5加密失败", e);
        }
    }
}
